package com.gobrs.async.core.task;

import com.gobrs.async.core.TaskSupport;

public interface GobrsTask<Param, Result> extends ITask {

    /**
     * 任务开始前执行
     */
    default void prepare(Param param) {}

    /**
     * 该条件决定是否执行任务
     * 此方法被设置为默认方法，因为用户希望在默认情况下返回true，即执行默认选择
     */
    default boolean necessary(Param param, TaskSupport support) {
        return true;
    }

    /**
     * 任务成功后的回调
     */
    default void onSuccess(TaskSupport support) {}

    /**
     * 任务失败后的回调
     */
    default void onFail(TaskSupport support, Exception exception) {}

    /**
     * 回滚
     * 相当于TCC的两阶段提交事务的补偿
     */
    default void rollback(Param param) {}

}
